#ifndef MARKMAKER_CPP_PLUGIN_INTERFACE_HPP
#define MARKMAKER_CPP_PLUGIN_INTERFACE_HPP
#include <opencv2/opencv.hpp>
#include <string>
#include <vector>
namespace cpp_plugin {
    class interface_t {
    public:
        virtual ~interface_t() = default;
        virtual std::string get_name() = 0;
        virtual std::string get_help_info() = 0;
        virtual std::string get_description_json() { return {}; }
        virtual cv::Mat process(cv::Mat data, std::string args) = 0;
    };
}

#ifdef INTERFACE_EXPORTS
#define INTERFACE_API __declspec(dllexport)
#else
#define INTERFACE_API __declspec(dllimport)
#endif

//注意，返回的指针需要delete
extern "C" INTERFACE_API std::vector<cpp_plugin::interface_t *> *get_cpp_plugin_instance_lists(void);
extern "C" INTERFACE_API void get_cpp_plugin_instance_deletor(std::vector<cpp_plugin::interface_t *> * instance);




#endif //MARKMAKER_CPP_PLUGIN_INTERFACE_HPP
